<!DOCTYPE html>
<html lang="en">
<head>
  <meta charset="UTF-8">
  <meta name="viewport" content="width=device-width, initial-scale=1.0">
  <title>Document</title>
</head>
<body>
  <script>
    //父类
    class Phone{
      brand;
      price;
      color;
      //为实例对象添加一个成员 sendMessage 值是一个函数
      sendMessage=function(){
        console.log('发消息');
      }

      //方法
      constructor(brand, price, color){
        this.brand = brand;
        this.price = price;
        this.color = color;
      }

      //声明方法
      call(someone){
        console.log(`可以给 ${someone} 打电话~~`);
      }

      sendMessage(){
        console.log('可以发送短信...');
      }

    }

    //子类  extends 关键
    class SmartPhone extends Phone{
      //声明属性
      pixel;
      storage;
      screenSize;
      //值固定的属性
      wifi = false;

      //子类在语法上可以没有构造方法, 如果子类声明了构造方法, 则「必须」要调用 super 函数
      constructor(a, b, c, d, e, f){
        //super 父类的构造方法
        super(a, b, c);
        //初始化实例化对象属性
        this.pixel = d;
        this.storage = e;
        this.screenSize = f;
      }

      //声明子类的方法
      playGame(){
        console.log('可以用来玩游戏, 比如说: 开心消消乐');
      }

      //拍照
      takePhoto(){
        console.log('可以用来拍照....');
      }

      //sendMessage 方法
      sendMessage(){
        // 如果有 wifi
        if(this.wifi){
          console.log('我可以使用微信发送消息...');
        }else{
          //调用父类的方法
          super.sendMessage();
          super.call('王源');
        }
      }
    }

    //实例化对象
    let HTC = new SmartPhone('HTC', 1999, '黑色', '300w', '16G', '4.7inch');

    console.log(HTC);
    //调用子类的 sendMessage
    HTC.sendMessage();
  </script>
</body>
</html>